package com.hayato.gpstweet.service;

import java.text.MessageFormat;
import java.util.List;

import twitter4j.GeoLocation;
import twitter4j.Paging;
import twitter4j.Query;
import twitter4j.QueryResult;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.http.AccessToken;

public class TwitterService {
    public static final String consumerKey = "Twitterアプリケーションの値を設定";
    public static final String consumerSecret = "Twitterアプリケーションの値を設定";
    
    // AccessTokenのキー
    private static final String tokenKey = "取得したAccessTokenのキーを設定";
    // AccessTokenの値
    private static final String tokenSecret = "取得したAccessTokenの値を設定";
    
    // 地図のデフォルトズームレベル
    public static final Integer DEFAULT_MAPZOOM = 14;
    
    // Twitterインスタンスの取得
    private Twitter getTwitter() {
        TwitterFactory factory = new TwitterFactory();
        AccessToken at = new AccessToken(tokenKey, tokenSecret);
        // AccessTokenによる認証
        return factory.getOAuthAuthorizedInstance(consumerKey, consumerSecret, at);
    }
    
    // つぶやく
    public void tweet(String message, double latitude, double longitude)
            throws TwitterException {
        Twitter twitter = getTwitter();
        // 緯度と経度から位置情報を作成する
        GeoLocation location = new GeoLocation(latitude, longitude);
        // 位置情報を指定して、つぶやく
        twitter.updateStatus(message, location);
    }

    // タイムラインの取得
    public List<Status> getTimeline() throws TwitterException {
        int page = 1;
        int pageCount = 20;
        Twitter twitter = getTwitter();
        // タイムラインの取得
        List<Status> statusList = 
            twitter.getUserTimeline(new Paging(page, pageCount));
        return statusList;
    }
    
    // 位置情報による検索
    public QueryResult search(double latitude, double longitude)
            throws TwitterException {
        Twitter twitter = getTwitter();
        Query query = new Query();
        // 緯度と経度から位置情報を作成する
        GeoLocation location = new GeoLocation(latitude, longitude);
        // 指定位置から半径10kmを設定する
        query.setGeoCode(location, 10, Query.KILOMETERS);
        // 位置情報を使用して検索する
        QueryResult result = twitter.search(query);
        return result;
    }

    // GoogleMapsの画像URI作成
    public String getMapURI(Double latitude, Double longitude,
            String tweetLocation, Integer mapzoom) {
        Object[] data = new String[]{latitude.toString(),longitude.toString()};
        String mapURI = MessageFormat.format(
                "http://maps.google.co.jp/maps/api/staticmap?center={0},{1}" +
                "&zoom=" + mapzoom +
                "&size=300x300&mobile=true&sensor=false" +
                "&markers=size:mid|color:red|{0},{1}" +
                tweetLocation,
                data);
        return mapURI;
    }
}
